﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using hou_elearning.Entity;
using hou_elearning.Business;
using hou_elearning.Custom;

public partial class Admin_control_ucPhannhom : System.Web.UI.UserControl
{
    private List<NguoidungEntity> glbLstGrvDatasource = null;
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            napDdlNhomnguoidung();
            napGrvNguoidung(true);
        }
    }
    /// <summary>
    /// Nạp GridView người dùng
    /// </summary>
    /// <author>liemqv</author>
    /// <create>30/04/2012</create>
    /// <param name="bLoadFromDB">Cho biết có cập nhật lại danh sách từ Database hay không</param>
    /// 
    public void napGrvNguoidung(bool bLoadFromDB)
    {
        divThongbao.InnerHtml = "";
        if (bLoadFromDB == true || Cache["cacheLstGrvDatasource"] == null)
        {
            glbLstGrvDatasource = NguoidungBRL.GetAll();
            Cache["cacheLstGrvDatasource"] = glbLstGrvDatasource;
        }
        glbLstGrvDatasource = (List<NguoidungEntity>)Cache["cacheLstGrvDatasource"];
        if (glbLstGrvDatasource.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị!</span></p>";
        }
        List<NguoidungEntity> lstNguoidungngoainhom = new List<NguoidungEntity>(); ;
        List<NguoidungEntity> lstNguoidungtrongnhom = new List<NguoidungEntity>();
        if(Session["PK_iNhomnguoidungID"] == null)
        {
            Session["PK_iNhomnguoidungID"] = ddlNhomnguoidung.SelectedValue;
        }
        Int64 PK_iNhomnguoidungID = Int64.Parse(Session["PK_iNhomnguoidungID"].ToString());
        NguoidungEntity oNguoidungFound = null;
        ddlNhomnguoidung.SelectedItem.Selected = false;
        ddlNhomnguoidung.Items.FindByValue(PK_iNhomnguoidungID.ToString()).Selected = true;
        List<Nguoidung_nhomEntity> lstNguoidung_Nhom = Nguoidung_nhomBRL.GetByFK_iNhomnguoidungID(PK_iNhomnguoidungID);
        lstNguoidungngoainhom.AddRange(glbLstGrvDatasource); //Ban đầu ngoài nhóm bằng tất cả
        foreach(Nguoidung_nhomEntity oNguoidungNhomSrc in lstNguoidung_Nhom)
        {
            oNguoidungFound = null;
            oNguoidungFound = glbLstGrvDatasource.Find(
                delegate(NguoidungEntity oNguoidungDes){return oNguoidungDes.PK_iNguoidungID == oNguoidungNhomSrc.FK_iNguoidungID;}
            );
            if(oNguoidungFound != null)
            {
                lstNguoidungtrongnhom.Add(oNguoidungFound); //Thêm vào danh sách trong nhóm
                lstNguoidungngoainhom.Remove(oNguoidungFound); //Và loại bỏ khỏi danh sách ngoài nhóm
            }
        }
        if (lstNguoidungtrongnhom.Count <= 0)
        {
            divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị</span></p>";
            grvNguoidungngoainhom.DataSource = null;
            grvNguoidungtrongnhom.DataBind();
        }
        else
        {
            grvNguoidungtrongnhom.DataSource = lstNguoidungtrongnhom;
            grvNguoidungtrongnhom.DataKeyNames = new string[] { "PK_iNguoidungID" };
            grvNguoidungtrongnhom.DataBind();
        }
        //
        if(lstNguoidungngoainhom.Count <= 0)
        {
            divThongbaoNgoaidanhsach.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Không có bản ghi nào để hiển thị</span></p>";
            grvNguoidungngoainhom.DataSource = null;
            grvNguoidungngoainhom.DataBind();
        }
        else
        {
            grvNguoidungngoainhom.DataSource = lstNguoidungngoainhom;
            grvNguoidungngoainhom.DataKeyNames = new string[] { "PK_iNguoidungID" };
            grvNguoidungngoainhom.DataBind();
        }
    }

    /// <summary>
    /// Nạp ddlNhomnguoidung
    /// </summary>
    /// <author>liemqv</author>
    /// <create>31/05/2012</create>
    ///
    public void napDdlNhomnguoidung()
    {
        List<NhomnguoidungEntity> lstNhomnguoidung = NhomnguoidungBRL.GetAll();
        ddlNhomnguoidung.DataSource = lstNhomnguoidung;
        ddlNhomnguoidung.DataTextField = "sTennhom";
        ddlNhomnguoidung.DataValueField = "PK_iNhomnguoidungID";
        ddlNhomnguoidung.DataBind();
    }
    /// <summary>
    /// Lấy ID người dùng đăng nhập
    /// </summary>
    /// <author>liemqv</author>
    /// <create>25/04/2012</create>
    /// 
    public Int64 iGetUserLogin()
    {
        Int64 PK_iNguoidungID = 0;
        try
        {
            if (Session["UserID"] != null)
            {
                PK_iNguoidungID = Int64.Parse(Session["UserID"].ToString());
            }
        }
        catch (Exception ex)
        {
            PK_iNguoidungID = 0;
        }
        return PK_iNguoidungID;
    }
    protected void grvNguoidungngoainhom_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvNguoidungngoainhom.PageIndex = e.NewPageIndex;
        napGrvNguoidung(false);
    }

    protected void btnSearchByID_Click(object sender, EventArgs e)
    {
        string strSearch = txtSearchByID.Text;
        short iPK_ID = 0;
        List<NguoidungEntity> lstSearchResult = null;
        glbLstGrvDatasource = (List<NguoidungEntity>)Cache["cacheLstGrvDatasource"];
        if (txtID.Text.Trim().Equals(""))
        {
            iPK_ID = 0;
        }
        else
        {
            iPK_ID = Int16.Parse(txtID.Text);
        }
        /* Nếu người dùng không nhập ID thì tìm theo từ khóa */
        if (iPK_ID == 0)
        {
            lstSearchResult = glbLstGrvDatasource.FindAll(
            delegate(NguoidungEntity oNguoidung)
            {
                return oNguoidung.sHoten.ToUpper().Contains
                (
                    strSearch.ToUpper()) ||
                    oNguoidung.sEmail.ToUpper().Contains(strSearch.ToUpper()) ||
                    oNguoidung.sDiachi.ToUpper().Contains(strSearch.ToUpper()) ||
                    oNguoidung.sSodienthoai.ToUpper().Contains(strSearch.ToUpper()
                );
            });
        }
        /* Tìm theo ID */
        else
        {
            lstSearchResult = glbLstGrvDatasource.FindAll
            (
                delegate(NguoidungEntity oNguoidungByID)
                {
                    return oNguoidungByID.PK_iNguoidungID == iPK_ID;
                }
            );
        }
        /* Hiển thị thông báo */
        if (lstSearchResult.Count == 0)
        {
            napGrvNguoidung(false);
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Không tìm thấy bản ghi nào phù hợp</span></p>";
        }
        else
        {
            grvNguoidungngoainhom.DataSource = lstSearchResult;
            grvNguoidungngoainhom.DataBind();
            divThongbao.InnerHtml = "<p class='info' id='info'><span class='info_inner'>Tìm thấy " + lstSearchResult.Count + " bản ghi phù hợp!</span></p>";
        }
    }
    protected void btnShowAll_Click(object sender, EventArgs e)
    {
        napGrvNguoidung(false);
        divThongbao.InnerHtml = "";
    }
    

    protected void lbtnAddToList_Click(object sender, EventArgs e)
    {
        Int64 PK_iNhomnguoidungID = 0;
        int iAddCount = 0;
        CheckBox chkNguoidung = null;
        try
        {
            if (Session["PK_iNhomnguoidungID"] != null)
            {
                PK_iNhomnguoidungID = Int64.Parse(Session["PK_iNhomnguoidungID"].ToString());
            }
            else
            {
                divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Xin hãy chọn bài học cần thêm và thử lại!</span></p>";
                return;
            }
            iAddCount = 0; //Đếm số lượng bản ghi thêm thành công
            /* Lặp với mỗi hàng */
            foreach (GridViewRow row in grvNguoidungngoainhom.Rows)
            {
                chkNguoidung = row.FindControl("chkDelete") as CheckBox;
                Int64 PK_iNguoidungID = Convert.ToInt64(grvNguoidungngoainhom.DataKeys[row.RowIndex].Values["PK_iNguoidungID"]);
                if ((chkNguoidung != null) && (chkNguoidung.Checked == true))
                {
                    Nguoidung_nhomEntity oNguoidungNhom = new Nguoidung_nhomEntity();
                    oNguoidungNhom.FK_iNguoidungID = PK_iNguoidungID;
                    oNguoidungNhom.FK_iNhomnguoidungID = (short)PK_iNhomnguoidungID;
                    if (Nguoidung_nhomBRL.Add(oNguoidungNhom) > 0)
                    {
                        ++iAddCount;
                    }
                }
            }
            napGrvNguoidung(false);
            if (iAddCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Thêm vào danh sách " + iAddCount + " bản ghi!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void lbtnRemoveFromList_Click(object sender, EventArgs e)
    {
        Int64 PK_iNhomnguoidungID = 0;
        int iRemoveCount = 0;
        CheckBox chkNguoidung = null;
        try
        {
            if (Session["PK_iNhomnguoidungID"] != null)
            {
                PK_iNhomnguoidungID = Int64.Parse(Session["PK_iNhomnguoidungID"].ToString());
            }
            else
            {
                divThongbao.InnerHtml = "<p class='info' id='warning'><span class='info_inner'>Xin hãy chọn bài học cần thêm và thử lại!</span></p>";
                return;
            }
            iRemoveCount = 0; //Đếm số lượng bản ghi thành công
            /* Lặp với mỗi hàng */
            foreach (GridViewRow row in grvNguoidungtrongnhom.Rows)
            {
                chkNguoidung = row.FindControl("chkDelete") as CheckBox;
                Int64 PK_iNguoidungID = Convert.ToInt64(grvNguoidungtrongnhom.DataKeys[row.RowIndex].Values["PK_iNguoidungID"]);
                if ((chkNguoidung != null) && (chkNguoidung.Checked == true))
                {
                    if(Nguoidung_nhomBRL.Remove(PK_iNguoidungID, PK_iNhomnguoidungID) == true)
                    {
                        iRemoveCount++;
                    }
                }
            }
            napGrvNguoidung(false);
            if (iRemoveCount > 0)
            {
                divThongbao.InnerHtml = "<p class='info' id='success'><span class='info_inner'>Xóa " + iRemoveCount + " bản ghi khỏi danh sách!</span></p>";
            }
        }
        catch (Exception ex)
        {
            divThongbao.InnerHtml = "<p class='info' id='error'><span class='info_inner'>Lỗi: " + ex.Message + "</span></p>";
        }
    }
    protected void ddlNhomnguoidung_SelectedIndexChanged(object sender, EventArgs e)
    {
        Session["PK_iNhomnguoidungID"] = ddlNhomnguoidung.SelectedValue;
        napGrvNguoidung(false);
    }
    protected void grvNguoidungtrongnhom_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        grvNguoidungngoainhom.PageIndex = e.NewPageIndex;
        napGrvNguoidung(false);
    }
}